package com.sisgesbyte.services.administracion;

import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.inject.Inject;
import com.sisgesbyte.common.ConstModAdministracion;
import com.sisgesbyte.common.ConstantesInternasSistema;
import com.sisgesbyte.common.Validaciones;
import com.sisgesbyte.dao.administracion.MantenimientoProductoDao;
import com.sisgesbyte.dao.beanDao.FiltrosSQLBean;
import com.sisgesbyte.dao.beanDao.ProductoRequest;
import com.sisgesbyte.data.entity.administracion.ProductoEntity;
import com.sisgesbyte.data.entity.comun.GenericEntity;
import com.sisgesbyte.services.administracion.bean.ProductoBean;
import com.sisgesbyte.services.administracion.bean.ProductoListaResponse;
import com.sisgesbyte.services.commonBean.GenericResponse;

@Stateless
public class MantenimientoProductoImpl  implements MantenimientoProducto {

	@EJB
	private MantenimientoProductoDao mantenimientoProductoDao;
	
	@Inject
	private Validaciones validaciones;
	
	@Override
	public ProductoListaResponse listaProductos(String codTransaccion, FiltrosSQLBean cadenaFiltros) {
		String mensajeTransaccionMetodo = "[listaProductos idTx=" + codTransaccion + "] - ";
		ProductoListaResponse response = new ProductoListaResponse();
		
		try{
			 response.setIdTransaccion(codTransaccion);
			 List<ProductoEntity> resDao = null;
			try{
				resDao = mantenimientoProductoDao.listarProductos(cadenaFiltros);
			}catch(Exception e){
				System.out.println(mensajeTransaccionMetodo + "Hubo un error al listar " +e);
				response.setCodigoRespuesta(ConstModAdministracion.MANT_LISTAR_COD_IDT);
				response.setMensajeRespuesta(ConstModAdministracion.MANT_LISTAR_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
				return response;
			}
			
			if(resDao.size() > 0){
				List<ProductoBean> lista = new ArrayList<ProductoBean>();
				for(ProductoEntity row : resDao){
					ProductoBean bean = new ProductoBean();
						bean.setActive(row.getActive());
						bean.setCategoria_producto(validaciones.validarCamposString(row.getCategoria_producto()));
						bean.setCategoria_producto_id(row.getCategoria_producto_id());
						bean.setCod_barra(validaciones.validarCamposString(row.getCod_barra()));
						bean.setCod_prod(validaciones.validarCamposString(row.getCod_prod()));
						bean.setId(row.getId());
						bean.setImagen(validaciones.validarCamposString(row.getImagen()));
						bean.setMarca(validaciones.validarCamposString(row.getMarca()));
						bean.setMarca_id(row.getMarca_id());
						bean.setObservacion(validaciones.validarCamposString(row.getObservacion()));
						bean.setPeso(row.getPeso());
						bean.setPrecio_promedio(row.getPrecio_promedio());
						bean.setProducto(validaciones.validarCamposString(row.getProducto()));
						bean.setUnidad_medida(validaciones.validarCamposString(row.getUnidad_medida()));
						bean.setUnidad_medida_id(row.getUnidad_medida_id());
						bean.setUnidadesxcaja(row.getUnidadesxcaja());
					lista.add(bean);
				}
				response.setListaProductos(lista);
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			}else{
				response.setCodigoRespuesta(ConstModAdministracion.MANT_LISTAR_COD_IDF);
				response.setMensajeRespuesta(ConstModAdministracion.MANT_LISTAR_MSJ_IDF.replace("msj", mensajeTransaccionMetodo));
			}
			
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error en el proceso" +e);
			response.setCodigoRespuesta(ConstModAdministracion.MANT_LISTAR_COD_IDT);
			response.setMensajeRespuesta(ConstModAdministracion.MANT_LISTAR_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
			return response;
		}
		
		return response;
	}

	@Override
	public GenericResponse nuevoProducto(String codTransaccion, ProductoBean producto) {
		String mensajeTransaccionMetodo = "[nuevoProducto idTx=" + codTransaccion + "] - ";
		GenericResponse response = new GenericResponse();
		try{
			GenericEntity resDao = null; 
			ProductoRequest  newItem = new ProductoRequest ();
			newItem.setActive(producto.getActive());
			newItem.setCateoriaProdId(validaciones.validarCampoInteger(producto.getCategoria_producto_id()));
			newItem.setCodBarra(validaciones.validarCamposString(producto.getCod_barra()));
			newItem.setCodProducto(validaciones.validarCamposString(producto.getCod_prod()));
			newItem.setImagen(validaciones.validarCamposString(producto.getImagen()));
			newItem.setMarcaId(producto.getMarca_id());
			newItem.setObservacion(validaciones.validarCamposString(producto.getObservacion()));
			newItem.setPeso(producto.getPeso());
			newItem.setPrecioPromedio(producto.getPrecio_promedio());
			newItem.setProducto(validaciones.validarCamposString(producto.getProducto()));
			newItem.setUnidadesxcaja(producto.getUnidadesxcaja());
			newItem.setUnidadMedidaId(producto.getUnidad_medida_id());
			
			try{
				resDao = mantenimientoProductoDao.guardarProducto(newItem);
			}catch(Exception e){
				System.out.println(mensajeTransaccionMetodo + "Hubo un error al registrar  en BD "+e );
				response.setCodigoRespuesta(ConstModAdministracion.MANT_NUEVO_COD_IDT);
				response.setMensajeRespuesta(ConstModAdministracion.MANT_NUEVO_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
				return response;
			}
			
			if(resDao.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			}else{
				response.setCodigoRespuesta(ConstModAdministracion.MANT_NUEVO_COD_IDF);
				response.setMensajeRespuesta(ConstModAdministracion.MANT_NUEVO_MSJ_IDF.replace("msj", mensajeTransaccionMetodo));
			}
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error en el proceso " +e);
			response.setCodigoRespuesta(ConstModAdministracion.MANT_NUEVO_COD_IDT);
			response.setMensajeRespuesta(ConstModAdministracion.MANT_NUEVO_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
			return response;
		}
		return response;
	}

	@Override
	public GenericResponse editarProducto(String codTransaccion, ProductoBean producto) {
		String mensajeTransaccionMetodo = "[editarProducto idTx=" + codTransaccion + "] - ";
		GenericResponse response = new GenericResponse();
		try{
			GenericEntity resDao = null; 
			ProductoRequest editItem = new ProductoRequest();
			editItem.setActive(producto.getActive());
			editItem.setCateoriaProdId(producto.getCategoria_producto_id());
			editItem.setCodBarra(validaciones.validarCamposString(producto.getCod_barra()));
			editItem.setCodProducto(validaciones.validarCamposString(producto.getCod_prod()));
			editItem.setId(producto.getId());
			editItem.setMarcaId(producto.getMarca_id());
			editItem.setObservacion(validaciones.validarCamposString(producto.getObservacion()));
			editItem.setPeso(producto.getPeso());
			editItem.setPrecioPromedio(producto.getPrecio_promedio());
			editItem.setProducto(validaciones.validarCamposString(producto.getProducto()));
			editItem.setUnidadesxcaja(producto.getUnidadesxcaja());
			editItem.setUnidadMedidaId(producto.getUnidad_medida_id());
			
			try{
				resDao = mantenimientoProductoDao.actualizarProducto(editItem);
			}catch(Exception e){
				System.out.println(mensajeTransaccionMetodo + "Hubo un error al editar  en BD "+e );
				response.setCodigoRespuesta(ConstModAdministracion.MANT_EDITAR_COD_IDT);
				response.setMensajeRespuesta(ConstModAdministracion.MANT_EDITAR_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
				return response;
			}
			if(resDao.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			}else{
				response.setCodigoRespuesta(ConstModAdministracion.MANT_EDITAR_COD_IDF);
				response.setMensajeRespuesta(ConstModAdministracion.MANT_EDITAR_MSJ_IDF.replace("msj", mensajeTransaccionMetodo));
			}
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error en el proceso " +e);
			response.setCodigoRespuesta(ConstModAdministracion.MANT_EDITAR_COD_IDT);
			response.setMensajeRespuesta(ConstModAdministracion.MANT_EDITAR_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
			return response;
		}
		
		return response;
	}

	@Override
	public GenericResponse deleteProducto(String codTransaccion, int codProducto) {
		String mensajeTransaccionMetodo = "[deleteProducto idTx=" + codTransaccion + "] - ";
		GenericResponse response = new GenericResponse();
		try{
			
			GenericEntity resDao = mantenimientoProductoDao.eliminarProducto(codProducto);
			
			if(resDao.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			}else{
				response.setCodigoRespuesta(ConstModAdministracion.MANT_ELIMINAR_COD_IDF);
				response.setMensajeRespuesta(ConstModAdministracion.MANT_ELIMINAR_MSJ_IDF.replace("msj", mensajeTransaccionMetodo));
			}
			
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error al eliminar  en BD " +e);
			response.setCodigoRespuesta(ConstModAdministracion.MANT_EDITAR_COD_IDT);
			response.setMensajeRespuesta(ConstModAdministracion.MANT_EDITAR_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
		}
		
		return response;
	}

	@Override
	public GenericResponse actualizarImagenProducto(String codTransaccion, ProductoBean producto) {
		String mensajeTransaccionMetodo = "[actualizarImagenProducto idTx=" + codTransaccion + "] - ";
		GenericResponse response = new GenericResponse();
		try{
			GenericEntity resDao = null; 
			ProductoRequest editImage = new ProductoRequest();
			editImage.setId(producto.getId());
			editImage.setImagen(validaciones.validarCamposString(producto.getImagen()));
			
			try{
				resDao = mantenimientoProductoDao.actualizarImagenProducto(editImage);
			}catch(Exception e){
				System.out.println(mensajeTransaccionMetodo + "Hubo un error al actualizar Imagen  en BD "+e );
				response.setCodigoRespuesta(ConstModAdministracion.IMAGEN_ACTUALIZAR_COD_IDT);
				response.setMensajeRespuesta(ConstModAdministracion.IMAGEN_ACTUALIZAR_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
				return response;
			}
			if(resDao.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			}else{
				response.setCodigoRespuesta(ConstModAdministracion.IMAGEN_ACTUALIZAR_COD_IDF);
				response.setMensajeRespuesta(ConstModAdministracion.IMAGEN_ACTUALIZAR_MSJ_IDF.replace("msj", mensajeTransaccionMetodo));
			}
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error en el proceso " +e);
			response.setCodigoRespuesta(ConstModAdministracion.IMAGEN_ACTUALIZAR_COD_IDT);
			response.setMensajeRespuesta(ConstModAdministracion.IMAGEN_ACTUALIZAR_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
			return response;
		}
		
		return response;
	}

}
